WindowsのシステムドライブをNVMe RAIDに
avashe.iconavasheの自作PCWindowsのシステムドライブが壊れたので治すついでにNVMe SSD 2枚でRAID1組むことにした
avasheのRyzen 5000の話
普段大量のディスクが束ねられた機材の上で仕事してるものだから、壊れるたびにディスク買いなおして再セットアップするまで稼働を止めないといけない自作PCが不満に感じられるようになった
システムドライブは冗長にしておきたい
WindowsではソフトウェアRAIDの仕組みが幾つかあるが、それぞれに欠点がある
ダイナミックディスクを使ったミラーリング(ミラーボリューム)
これはもう公式ドキュメントでdeprecated扱いを受けている
ダイナミックディスクに変換すると色々制約を受ける
記憶域 (storage spaces)を使った多重化
システムドライブでは使えない
ダイナミックディスクより柔軟だし後からドライブを加えられるなど、柔軟性が高い
通常のデータ保存ドライブとして使うのはあり
microsoft的にはハードウェアRAIDとstorage spacesで使い分けてほしいらしい
この事実を調べきらずに勢いでSeagate Firecuda 530 2TBを2枚買っていた私、焦る
impressのSeagate Firecuda 530レビュー
え、ダイナミックディスクでえいやじゃダメなの!?
システムドライブが乗ったNVMe RAIDのためには、対応のCPUとマザーボードでRAID on CPUする必要がある
Intelの場合はVROCに対応してる必要あり
AMDは対応CPU-チップセットなら追加パーツなしでサポートする
PCIeに刺してM.2のスロットごと増設するRAIDカードもある
ただしマザボ側PCIeレーンをカード上SSDに分配する必要があり、マザボがそれに対応しているかどうかで大分コストが変わる
HighPoint SSD7540のような、分配チップがボードに実装されているものは10万以上する...!
ASUSの対応マザボなら、ASUS HYPER M.2 X16 GEN 4 CARDのような分配チップなしカードが使えるので非常に安く済む(数千円)
これらはUEFIとCPUのサポートを受けたRAIDなので、厳密なハードウェア(ボード上の別チップにCPU負荷をオフロードする)RAIDではない
それでも目的は十分達せてるのでOK、CPU高負荷が常態化している環境じゃないし
こういうのをフェイクRAIDというらしい
これだとRAIDがフェイクみたいでややこしい命名じゃない?
フェイク(ハードウェア)RAIDね
エンプラ級のラックサーバならそういうのもあるだろうけど、私にはやる目的も金もないです
HDDドライブと不揃いなSATA SSDがいくつかあるので、これらは記憶域で束ねちゃおうかな
なのでSATAはAHCIのままで
システムドライブのバックアップドライブとして使う
/icons/hr.icon
以下、AMD環境でWindowsのシステムドライブをNVMe RAID化する作業ログ
AMDのRAIDはAMDのサポートページから該当のチップセットのページを開き、"AMD RAID Driver (SATA, NVMe RAID)" の項目を開くと、RAID driverのバイナリとRAIDを設定するドキュメントがある
"AMD RAID Installer (SATA, NVMe RAID)" は後述するwindows上の管理ツールのインストーラなので今は不要
UEFI上でRAIDを設定するだけではなく、Windows上で使えるようにするためにRAID driverを用意する必要がある
avashe.icon自分用メモ
X570のサポートページ
AMD RAIDの詳細な管理マニュアル(執筆時点)
これが包括的なマニュアルなので、これをがっつり読むだけでもいい
linuxでのインストール方法もこっちにある
WindowsでSATA NVMe RAIDするためのquick start guide(執筆時点)
👆のマニュアルからRAIDでのセットアップ手順だけ抜粋したもの
最新のものは各自サポートページから飛ぶこと
先述の管理マニュアルとWindows向けquick start guideをベースに作業する
私が使用したのはASUS ROG Strix X570-E Gamingです
マザボによってUEFIのレイアウトは異なるので表記や位置が異なる可能性があります
System Requirements: Memory (RAM) Minimum: 16 GB total, Recommended: 32 GB total って本当にそんなにいるのか?
RAIDXpert2は公式が名前をオーバーライドしており、文脈によって意味が変わるのでメモ 
RAIDXpert2 Configuration Utility (またはHII Configuration Utility)
UEFIの設定ユーティリティで使える
ディスクを初期化したりRAID arrayを組むのに使う
HIIってなに?ドキュメントに書いてあったけど何の略称か不明
OS RAID Management GUI (AMD RAIDXpert2)
Windows上で動作するRAID管理ツール
ヘルスの確認やディスクが壊れた時の挙動もここで設定できる
やること
詳細な手順は管理マニュアル参照、ここでは重要な部分と自分の独自設定だけメモ
1. UEFIの設定
NVMe RAIDの有効化 -> 保存して再起動してまたUEFIに入る
Advanced > SATA configuration > NVMe RAID をEnabledにした
これでRAIDXpert2 Configuration Utilityが有効化される
RAIDXpert2 Configuration Utilityからディスクを初期化し、かつarrayを作成する
Initialize DiskしてからCreate Arrayする
SSDで作られたArrayのキャッシュポリシーはNo cacheでいい
ついでにCSMを無効化し、Secure bootを有効化した
asus rog strixだとわかりづらいけど Boot > Secure Boot > OS Type をWindows UEFI modeにする
2. Windowsのインストールメディアと、RAID driverを入れたUSBメモリの2つを用意する
したがってUSBメモリは最低2つ必要
USBメモリがストレージとしては問題ないのにインストールメディアとして正しく動作しない、という事態に陥りかなり沼った。予備USBメモリは持っておいたほうがいい。
プロセッサによって用意しておくべきRAID driverが違う
私はRyzen 9 5900XなのでAMD Ryzen™ 5000 Series Desktop Processors、したがってNVMe CCを用意する
3. 一般的な手順でWindowsをインストールし、その初期インストール中のウィザードでRAID driverを読み込ませる
管理マニュアルの通りrcbottom、rcraid、rccfgの順で読む
Arrayのメタ情報を書き換えてしまう可能性があるためドライバを読み込ませるまではディスクに触れないこと
4. Windowsインストールが成功したら、OS RAID Management GUI (AMD RAIDXpert2) をインストールする
雑感
手順は上のもので十分なのだが、インストール時に0xC0000005で失敗する問題に遭遇。インストールメディア用に使っていたUSBメモリが原因だと気づくまでだいぶ時間を溶かした...
予備のUSBメモリは持っておいたほうがいい
今でもこのUSBメモリはストレージとしては動作するので、64GBなのにFAT32でフォーマットすることが悪かったとか?バグを特定する気はありませんが...
Arrayは仮想デバイスなのでS.M.A.R.Tによる温度確認とかができないのがつらい
OS RAID Management GUI (AMD RAIDXpert2)みたいな管理ツールはあるものの、温度は取れない
RAID cacheの有無
RAID自体にキャッシュ機能があるのでそれも検討した
write back cacheは一時的にメモリに書き込むもので、UPSがないことから見送り
私の環境はメモリが結構余裕あるので、UPS入れたらランダムwrite向上目的で入れるのは全然あり
read cacheはシーケンシャルライトを検知してプリフェッチするもの
すでに十分高速だけど一応確認した
CrystalDiskMark使用
OS RAID Management GUI (AMD RAIDXpert2) からワンクリックでcache policyを変えられる
raid read cacheなし
https://gyazo.com/2004791207895f522b37145016b2f648
raid read cacheのみ有効化(ついでにWriteも計っている)
https://gyazo.com/f099e4cce7ed646e2461c8f94219f2bf
パフォーマンスについて
体感しない範疇だろうけど、raid read cacheなしのほうがSEQ128K Q32T1などで700MB/s程度早い
RAID1なのでシーケンシャルreadは2倍弱になっているのだが、ランダムwriteは1/3位になってる...
PC Watch記事を基準に
ここはUPS用意して積極的書き込みキャッシュでカバーすべきところかな
静かめな常時インバータ給電方式のUPSがほし~!実際にファンノイズを聞いてから買いたい~!と駄々をこねて5年が経過しました
サーバールームじゃないんだから、エアコンの音以上の騒音は絶対に無理
さもなければUPSだけ隔離して延長コードを別の部屋に引くとかしないとあかんやん
UPS試せる店って日本のどこにあるの?
一時的にraid write cacheを有効化してみたが、顕著な差はなかった。サイズが足りないとか、ベンチマークツールが書き込みの命令にキャッシュの迂回を指定してるとか?
いずれにせよやるならraid write cacheは使わず、windows自身のディスク書き込みキャッシュを有効化したほうがいいだろう
AMDやASUSなど、メーカー公式以外で参考にしたページ
https://www.asus.com/jp/support/FAQ/1045089
https://www.zpgbf.jp/raid-win10/
https://adanmarketing.com/archives/1945
https://www.gdm.or.jp/review/2017/1009/238515/2/
公式ドキュメントではCSM Support + UEFI強制なのだが、実際の自作記事だとみんな無効化している
私も無効化した、secure bootとかの兼ね合いもあるし
というかASRockでやってる人ばかりだな